package com.example.emos.workflow.config.quartz;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import com.example.emos.workflow.db.dao.TbUserDao;
import com.example.emos.workflow.service.MeetingService;
import com.example.emos.workflow.service.WorkflowService;
import com.example.emos.workflow.task.EmailTask;
import com.example.emos.workflow.task.SendEmailTask;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.runtime.ProcessInstance;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 检查工作流的会议审批任务
 */
@Slf4j
@Component
public class MeetingWorkflowJob extends QuartzJobBean {
    @Autowired
    private RuntimeService runtimeService;

    @Autowired
    private HistoryService historyService;

    @Autowired
    private MeetingService meetingService;

    @Autowired
    private WorkflowService workflowService;


    @Autowired
    private TbUserDao userDao;

    @Autowired
    private SendEmailTask sendEmailTask;


    @Override
    protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException {
        System.out.println("MeetingWorkflowJob");
        Map map = ctx.getJobDetail().getJobDataMap();
        String uuid = map.get("uuid").toString();
        String instanceId = MapUtil.getStr(map, "instanceId");
        String result = MapUtil.getStr(map, "result");

        /** 会议审批完毕时就会执行该工作流
         *           1.申请中，2.审批未通过，3.审批通过，4.会议进行中，5.会议结束
         *  1 会议开始时间 已经过了现在的时间还没审批 ？ 删除 发邮件？
         *  2 是否要提醒 部门经理 审批任务
         *
         */
//        ProcessInstance instance = runtimeService.createProcessInstanceQuery().processInstanceId(instanceId).singleResult();
//        if (instance != null) {//会议工作流刚开始 创建了工作流 ，还没结束 所以里面有 instanceId
//            String runtimeId = runtimeService.createProcessInstanceQuery().processInstanceId(instanceId).singleResult().getId();
//            HashMap instanceMap = (HashMap) runtimeService.getVariables(runtimeId);

//            String start1 = MapUtil.getStr(map, "start");
//            String end1 = MapUtil.getStr(instanceMap,"end");
//            String date1 = MapUtil.getStr(instanceMap,"data");
//
//            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
//            String dateStr = df.format(new Date());// new Date()为获取当前系统时间，也可使用当前时间戳s
//            Date d  = DateUtil.parse(dateStr);


//            workflowService.deleteProcessById(uuid, instanceId, "会议", "会议过期");
//            HashMap param = new HashMap();
//            param.put("uuid", uuid);
//            param.put("status", 2);
//            meetingService.updateMeetingStatus(param);
//            log.debug("会议已失效");
//        } else {//审批已经完成了  看审批结果
        //同意 发通知给所有人
//        HashMap param = new HashMap();
//        if ("同意".equals(result)) {
//            //更改会议状态
//            // 1.申请中，2.审批未通过，3.审批通过，4.会议进行中，5.会议结束    //////
//            param.put("status", 3);
//        } else {
//            // 更改会议状态
//            // 1.申请中，2.审批未通过，3.审批通过，4.会议进行中，5.会议结束
//            param.put("status", 2);
//        }
//
//        param.put("uuid", uuid);
//        meetingService.updateMeetingStatus(param);
//        log.debug("会议状态更新成功");

        sendEmailTask.SendEmailToApproval(map);
    }
}


